import React from 'react';
import { Tooltip, Helper } from '@knownsec/react-component';
import s from './style.module.less';
import moment from 'moment';
import safeIcon from '@/assets/svg/safe.svg';
import riskIcon from '@/assets/svg/risk_high.svg';
import { CONTENT_KEYWORD_IDX_LABEL_MAP } from '@/common/common';
import {has} from 'lodash'
function caleTimes(start, end) {
  if (start) {
    start = new Date(start).getTime();
    end = new Date(end).getTime() || new Date().getTime();
    if (end <= start) {
      return '0时0分';
    }
    const longs =
      Math.floor(moment.duration(end - start).asHours()) +
      '小时' +
      moment.duration(end - start).minutes() +
      '分';
    return longs;
  } else {
    return '-';
  }
}

const diskList = ['低危', '中危', '高危'];

export const taskSysParams = [
  {
    key: 'title',
    name: '业务系统标题',
  },
  {
    key: 'city_name',
    name: '地理位置',
  },
  {
    key: 'port',
    name: 'IP地址',
  },
  {
    key: 'icp',
    name: 'ICP备案',
  },
  //   {
  //     key: 'endDate',
  //     name: '域名到期',
  //   },
  {
    key: 'alexa',
    name: 'alexa',
  },
  {
    key: 'waf_list',
    name: '防护信息',
  },
];

export const httpFunction = [
  { title: '监控类型', dataIndex: 'type' },
  {
    title: '状态',
    dataIndex: 'pingres',
    className: 'safeimg',
    render: (e) => (
      <>
        <img src={e.includes('安全') ? safeIcon : riskIcon} />
        {e}
      </>
    ),
  },
  {
    title: '建议信息',
    dataIndex: 'advice',
    render: (valu, row) => {
      return (
        <Tooltip overlay={<div className={s.w300}>{httpMap[row.type]}</div>} placement="top">
          <div className={s.ell}>{httpMap[row.type]}</div>
        </Tooltip>
      );
    },
  },
  //   { title: '说明', dataIndex: 'explain', render: (value) => value || '-' },
];
export const httpMap = {
  HEAD: 'HEAD方法与GET方法的行为类似，但服务器在响应中只返回首部。不会返回请求主体部分。这就允许客户端在未获取实际资源的情况下，对资源的首部进行检查。也被认为是安全的方法。',
  TRACE: '服务端发起一个请求时，这个请求可能要穿过防火墙，代理，网关或其他一些应用程序。每个中间节点都可能会修改原始的HTTP请求。TRACE方法允许客户端在最终将请求发送给服务器时，获得请求的最终形态。',
  GET: 'GET是最常用的HTTP请求方法。通常用于请求服务器获取某个资源，被认为是安全的方法。',
  PUT: '与GET从服务器读取文档相反，PUT方法会向服务器写入文件。PUT方法的语义就是让服务器用请求的主体来创建一个由请求的URL命名的新文档。',
  POST: 'POST方法起初是用来向服务器输入数据的。实际上，通常会用它来支持HTML的表单。表单中填好的数据会被POST方法提交到服务器中并做进一步处理。',
  OPTIONS: 'OPTIONS方法请求Web服务器告知其支持的各种功能。可以询问服务器通常支持哪些方法，或者对某些特殊资源支持哪些方法。该方法能够让客户端不用实际访问那些资源就能判定访问各种资源的最优方式。',
  DELETE: 'DELETE方法能够请求服务器删除请求URL所指定的资源。'
}
export const outService = [
  { title: '服务端口', className: 'smwidth', dataIndex: 'port', render: (value) => value || '-' },
  { title: '服务名称', className: 'xlwidth', dataIndex: 'name', render: (value) => value || '-' },
  //   { title: '所用产品', dataIndex: 'product', render: (value) => value || '-' },
  //   { title: '服务版本', className:'xlwidth', dataIndex: 'version', render: (value) => value || '-' },
  //   {
  //     title: '建议',
  //     dataIndex: 'fingerprint',
  //     render: (value) => (
  //       <Tooltip
  //         overlay={
  //           <>
  //             <p style={{ maxWidth: 500, wordBreak: 'break-word' }}>建议：{value || '-'}</p>
  //           </>
  //         }
  //         placement="topLeft"
  //       >
  //         <div className={s.textellipsis}>{value || '-'}</div>
  //       </Tooltip>
  //     ),
  //   },
];

export const childInfo = [
  {
    title: '子域名',
    dataIndex: 'subdomain',
    render: (value) => (
      <Tooltip
        overlay={
          <>
            <p>子域名：{value || '-'}</p>
          </>
        }
        placement="topLeft"
      >
        <div className={s.textellipsis}>{value || '-'}</div>
      </Tooltip>
    ),
  },
  {
    title: 'IP地址',
    dataIndex: 'ip',
    render: (value) => (
      <Tooltip
        overlay={
          <>
            <p>IP地址：{value || '-'}</p>
          </>
        }
        placement="topLeft"
      >
        <div className={s.textellipsis}>{value || '-'}</div>
      </Tooltip>
    ),
  },
];

export const ipStatus = [
  { title: '类型', dataIndex: 'ipType' },
  { title: '状态', dataIndex: 'status' },
];

export const systemInfo = [
  { title: '架构', dataIndex: 'struct' },
  { title: '名称', dataIndex: 'name' },
  { title: '版本', dataIndex: 'version' },
  { title: '全名', dataIndex: 'fullName' },
  { title: '主机名', dataIndex: 'mainName' },
];

export const webApp = [
  { title: '名称', dataIndex: 'name' },
  { title: '版本', dataIndex: 'version' },
];

export const timeColumns = [
  {
    title: '检测项',
    dataIndex: 'item',
    className: 'fixwidth',
    render: (e) => {
      return e || '-';
    },
  },
  {
    title: '开始时间',
    className: 'xlwidth',
    dataIndex: 'started_at',
    render: (value) => (value ? moment(value).format('YYYY-MM-DD HH:mm:ss') : '-'),
  },
  {
    title: '结束时间',
    className: 'xlwidth',
    dataIndex: 'ended_at',
    render: (value) => (value ? moment(value).format('YYYY-MM-DD HH:mm:ss') : '-'),
  },
  {
    title: '耗时',
    dataIndex: 'timeInterver',
    className: 'fixwidth',
    render: (val, data) => caleTimes(data.started_at, data.ended_at),
  },
  {
    title: '任务ID',
    dataIndex: 'task_id',
    render: (e) => {
      return e || '-';
    },
  },
];
export const eventName = {
  malscan: '挂马',
  keyword: '敏感词',
  black_links: '暗链',
  privacy_disclosure: '隐私信息泄漏',
  cryptojacking: '挖矿',
  broken_links: '坏链',
};
export const riskColumns = [
  {
    title: '风险等级',
    dataIndex: 'grade',
    render: (e) => {
      return e || '-';
    },
  },
  {
    title: '说明',
    dataIndex: 'explain',
    render: (e) => {
      return e || '-';
    },
  },
];

export const localScanColumns = [
  {
    key: 'created_at',
    dataIndex: 'created_at',
    title: '监测时间',
    render: (value) => (value ? moment(value).format('YYYY-MM-DD HH:mm:ss') : '-'),
  },
  {
    key: 'ping',
    dataIndex: 'ping',
    title: 'Ping响应时间',
    render: (value) => (value !== '-' ? value + 'ms' : '-'),
  },
  {
    key: 'http_get',
    dataIndex: 'http_get',
    title: 'HTTP响应时间/状态码',
    render: (value) => {
      if (!has(value,"time")) {
        return '-/-';
      } else {
        const time=value.time !== '-' ? value.time + 'ms' : '-';
        return `${time} / ${value.status}`;
      }
    },
  },
  {
    key: 'http_get',
    dataIndex: 'http_get',
    title: '域名解析速度',
    render: (value) => {
      if (!has(value,"dns_time")) {
        return '-';
      } else {
        return value.dns_time !== '-' ? value.dns_time + 'ms' : '-';
      }
    },
  },
  {
    key: 'http_get',
    dataIndex: 'http_get',
    title: '页面读取速度',
    render: (value) => {
      if (!has(value,"download_time")) {
        return '-';
      } else {
        return value.download_time !== '-' ? value.download_time + 'ms' : '-';
      }
    },
  },
  {
    key: 'normal_status',
    dataIndex: 'normal_status',
    title: (
      <div>
        可用性状态
        <Helper
          placement="top"
          overlay="按HTTP响应状态码判定，检测处于200-299即可用性正常"
          className="paddingHelp"
        ></Helper>
      </div>
    ),
    render: (value) => {
      const STATUS=['未知','正常','异常']
      const STATUS_C=['#7f7e7d','#11ab4e','#f04038']
      if (!value) {
        return '-';
      } else {
        return <span style={{color:STATUS_C[value]}}>{STATUS[value]}</span>;
      }
    },
  },
];

export const securityParams = [
  // 2全，3页面
  {
    key: 'crawler_scope',
    name: '检测类型',
  },
  {
    key: 'crawler_max_page',
    name: '最大页数',
  },
  {
    key: 'crawler_depth',
    name: '检测深度',
  },
  {
    key: 'evidence',
    name: '是否取证',
  },
  {
    key: 'requests_per_sec',
    name: '每秒最大请求数',
  },
  {
    key: 'request_timeout',
    name: '超时设置',
  },
];
export const changeCheckParams = [
  {
    key: 'crawler_scope',
    name: '检测类型',
  },
  {
    key: 'crawler_max_page',
    name: '最大页数',
  },
  {
    key: 'crawler_depth',
    name: '检测深度',
  },
  {
    key: 'is_check_text',
    name: '内容变更',
  },
  {
    key: 'is_check_structure',
    name: '结构变更',
  },
  {
    key: 'is_check_resource',
    name: '资源变更',
  },
  {
    key: 'automatic_update_baseline_interval',
    name: '变更基数',
  },
];

export const webParams = [
  {
    key: 'crawler_max_page',
    name: '最大页数',
  },
  {
    key: 'crawler_depth',
    name: '检测深度',
  },
  {
    key: 'requests_per_sec',
    name: '每秒最大请求数',
  },
  {
    key: 'request_timeout',
    name: '超时设置',
  },
  {
    key: 'scan_profile',
    name: '策略模版',
  },
];
export const scanProfileList = [
  '全面深入扫描',
  '高危漏洞扫描',
  'SQL注入',
  'XSS攻击',
  '默认扫描',
  '快速扫描',
];
export const linkParams = [
  {
    key: 'crawler_max_page',
    name: '最大页数',
  },
  {
    key: 'crawler_depth',
    name: '检测深度',
  },
  {
    key: 'requests_per_sec',
    name: '每秒最大请求数',
  },
  {
    key: 'request_timeout',
    name: '超时设置',
  },
];
export const privacyParams = {
  email: '邮箱',
  id_number: '身份证号码',
  phone_number: '手机号码',
  bank_card_number: '银行卡号',
};
export const scanTypeParams = {
  target_info: '站点信息',
  availability: '可用性',
  securityEvent: '安全事件',
  risk_link: '风险外链',
  vul: '漏洞',
  change_check: '篡改',
};
// 挂马 详情
export const maDetailColumns = [
  {
    title: '特征描述',
    dataIndex: 'desc',
  },
  {
    title: '类型',
    dataIndex: 'type',
  },
  {
    title: '发现特征URL',
    dataIndex: 'url',
  },
];
// 敏感 详情
export const sensDetailColumns = [
  {
    title: '敏感词类型',
    dataIndex: 'type',
    render: (x) => CONTENT_KEYWORD_IDX_LABEL_MAP[x] || x,
  },
  {
    title: '敏感词',
    dataIndex: 'word',
  },
];
// 挖矿 详情
export const miningDetailColumns = [
  {
    title: '关键词',
    dataIndex: 'pattern',
  },
  {
    title: '链接资源',
    dataIndex: 'src',
  },
];
// 隐私信息 详情
export const privacyDetailColumns = [
  {
    title: '隐私类型',
    dataIndex: 'type_name',
    render: (value) => (value ? privacyParams[value] : '-'),
  },
  {
    title: '详情',
    dataIndex: 'content',
  },
];
// SEO劫持 详情
export const seoDetailColumns = [
  {
    title: 'User Agent',
    dataIndex: 'user_agent',
  },
  {
    title: 'Referer',
    dataIndex: 'referer',
  },
  {
    title: '辅助信息',
    dataIndex: 'description',
  },
];

export const scanHttpParams = [
  {
    key: 'area',
    name: '监测点',
  },
  {
    key: 'created_at',
    name: '监测时间',
  },
  {
    key: 'ip',
    name: '响应服务器IP',
  },
  {
    key: 'content_len',
    name: 'HTTP响应长度',
  },
  {
    key: 'status_code',
    name: '响应状态码',
  },
  {
    key: 'dns_time',
    name: 'DNS解析时间',
  },
  {
    key: 'connect_time',
    name: '服务器连接耗时',
  },
  {
    key: 'ssl_shake_time',
    name: '服务器响应耗时',
  },
  {
    key: 'download_time',
    name: '内容下载时间',
  },
  {
    key: 'resp_time',
    name: '总响应时间',
  },
  {
    key: 'has_error',
    name: '监测结果',
  },
];
export const scanPingParams = [
  {
    key: 'area',
    name: '监测点',
  },
  {
    key: 'created_at',
    name: '监测时间',
  },
  {
    key: 'ip',
    name: '响应主机IP',
  },
  {
    key: 'resp_time',
    name: '响应时间',
  },
  {
    key: 'status_code',
    name: 'TTL',
  },
  {
    key: 'dns_time',
    name: '发送包数量',
  },
  {
    key: 'connect_time',
    name: '接收包数量',
  },
  {
    key: 'loss_rate',
    name: '丢包率',
  },
  {
    key: 'download_time',
    name: '数据包大小',
  },
  {
    key: 'has_error',
    name: '监测结果',
  },
];
export const securityNameMap = {
  change_check: '篡改',
  black_links: '暗链',
  malscan: '挂马',
  cryptojacking: '挖矿',
  seo_hijack: 'SEO劫持',
  keyword: '敏感词',
  privacy_disclosure: '隐私信息',
  broken_links: '坏链',
  // 8: '变更信息',
};
export const vulParams = [
  {
    key: 'name',
    name: '漏洞名称',
    className: 'hoveritem',
  },
  {
    key: 'type',
    name: '漏洞类型',
  },
  {
    key: 'severity',
    name: '漏洞等级',
  },
  {
    key: 'time',
    name: '验证时间',
  },
  //   {
  //     key: 'source',
  //     name: '漏洞来源',
  //   },
  {
    key: 'code',
    name: '漏洞编号',
  },
];

// 漏洞等级 索引为对应的数值
export const eventSeverityDict = ['信息', '低危', '中危', '高危', '严重'];
export const eventSeverityOption = [
  {
    label: '信息',
    value: 'INFO',
  },
  {
    label: '低危',
    value: 'LOW',
  },
  {
    label: '中危',
    value: 'MEDIUM',
  },
  {
    label: '高危',
    value: 'HIGH',
  },
  {
    label: '严重',
    value: 'CRITICAL',
  },
];
export const outLinkOption = [
  {
    label: '信息',
    value: 'INFO',
  },
  {
    label: '低危',
    value: 'LOW',
  },
  {
    label: '中危',
    value: 'MEDIUM',
  },
  {
    label: '高危',
    value: 'HIGH',
  },
];
export const outLinkDict = ['', '', '低危', '中危', '高危', ''];
// 漏洞验证
export const verificationDict = [
  '未验证',
  '验证中',
  '已验证(存在)',
  '已验证(不存在)',
  '已验证(再次确认)',
];
// 漏洞状态
export const actionDict = ['待修复', '已修复', '忽略'];
